import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        //购物车数据列表  直接在根组件中对cartProduct进行监测
        cartProductList: JSON.parse(window.localStorage.getItem('cartData')) || [],
        //是否显示购物车
        isShowCart: false,
        //是否显示商品最大限制框
        isShowPrompt: false,
        //收货地址的id要另外存到本地
        id: JSON.parse(window.localStorage.getItem('addressId')) || 1,
        // id: 6,

        // 存收货地址信息
        addressInfo: JSON.parse(window.localStorage.getItem('addressData')) || [{
            id: 1,
            name: '吴嘻嘻',
            phone: '13611223344',
            areacode: '011',
            tel: '8261532',
            provinceId: "516500",
            province: '广东省',
            cityId: "516522",
            city: "陆丰市",
            areasId: "110101",
            areas: "博美镇",
            add: '北街胡同2号102',
            default: true
        }],
        //发票信息的数据
        ticket: {
            name: '',
            msg: ''
        }
    },
    getters: {
        //选中的商品列表
        selectedCartLists(state) {
            return state.cartProductList.filter(item => item.isChecked);
        },
        //计算总数量
        totalCount(state) {
            let total = 0;
            state.cartProductList.forEach(item => {
                total += item.count;
            })
            return total;
        },
        //计算总价格
        totalPrice(state) {
            let price = 0;
            state.cartProductList.forEach(item => {
                price += item.productObj.price * item.count;
            })
            return price;
        },
        //计算已选择的商品数量
        selectedCount(state) {
            let count = 0;
            state.cartProductList.filter(item => item.isChecked).map(item => {
                count += item.count;
            })
            return count;
        },
        //计算已选择的商品总价格
        selectedPrice(state) {
            let sPrice = 0;
            state.cartProductList.filter(item => item.isChecked).map(item => {
                sPrice += item.count * item.productObj.price;
            })
            return sPrice;
        },
        //默认地址
        defaultAdd(state) {
            return state.addressInfo.find(item => item.default);
            // find方法直接返回对象 filter方法返回数组
        }
    },
    mutations: {
        //改变商品的限制bool值
        changePrompt(state, { bool }) {
            state.isShowPrompt = bool;
        },
        // 加入购物车（不理解）
        addCart(state, { productObj, count }) {
            //判断是否含有当前id（判断是否存在）
            let idx = state.cartProductList.findIndex(item => item.productObj.sku_id == productObj.sku_id)
            console.log(idx);
            console.log(state.cartProductList);
            //如果是第一次添加
            if (idx == -1) {
                state.cartProductList.push({
                    productObj,
                    isChecked: true,
                    count
                })
            }
            //如果不是第一次添加 直接类加数量
            else {
                //判断如果商品数量超过最大限制，则弹出提示框，不让商品接着添加
                if ((state.cartProductList[idx].count + count) > state.cartProductList[idx].productObj.limit_num) {
                    state.isShowPrompt = true;
                }
                state.cartProductList[idx].count += count;
            }
        },
        //显示或隐藏购物车
        showOrHideCart(state, { bool }) {
            state.isShowCart = bool;
        },
        //删除购物车的单个商品
        delCartProduct(state, { productObj }) {
            let idx = state.cartProductList.findIndex(item => item.productObj.sku_id == productObj.sku_id)
            state.cartProductList.splice(idx, 1);
        },
        //改变购物的的加减点击
        changeCartCount(state, { obj, count }) {
            let idx = state.cartProductList.findIndex(item => item.productObj.sku_id == obj.sku_id)
                //最大限制数
            let maxNum = state.cartProductList[idx].productObj.limit_num;
            //如果没有超过最大限制的话
            if (state.cartProductList[idx].count + count <= maxNum && state.cartProductList[idx].count + count > 0) {
                state.cartProductList[idx].count += count;
            }
            //如果超过了最大限制 显示最大限制框
            if (state.cartProductList[idx].count == maxNum) {
                state.isShowPrompt = true;
            }
        },
        //改变单个商品是否选中
        changeIsChecked(state, { productObj }) {
            console.log("哈哈哈修改了");
            let idx = state.cartProductList.findIndex(item => item.productObj.sku_id == productObj.sku_id);
            console.log(idx);
            //修改isChecked
            state.cartProductList[idx].isChecked = !state.cartProductList[idx].isChecked;
        },
        //全选是否选中
        changeAllChecked(state, { isChecked }) {
            state.cartProductList.forEach(item => item.isChecked = isChecked);
        },
        //购物车页面选中的商品
        delSelectProduct(state) {
            state.cartProductList = state.cartProductList.filter(item => !item.isChecked);
        },
        //删除地址
        delAddress(state, { index }) {
            state.addressInfo.splice(index, 1);
        },
        //点击保存修改新地址
        saveData(state, { info, type }) {
            //要修改
            if (type == 'modify') {
                let idx = state.addressInfo.findIndex(item => item.id == info.id)

                //如果当前设了默认地址 那就把别的默认地址取消
                if (info.default) {
                    state.addressInfo.forEach(item => item.default = false);
                }
                //如果默认地址取消了  就让所有地址中的第一个地址设为默认
                else {
                    state.addressInfo[0].default = true;
                }
                console.log(info, "这是修改打印的info列表");
                state.addressInfo[idx] = info;
            } else if (type == 'add') {
                //如果当前设了默认地址 那就把别的默认地址取消
                if (info.default) {
                    state.addressInfo.forEach(item => item.default = false);
                }
                //根据省市区的id 去拿到对应的title
                console.log(info, "这是添加的info");
                state.addressInfo.push({...info, id: ++state.id });
            }
        },
        //公司抬头
        commitTicket(state, { bool, msg }) {
            if (bool) {
                //公司
                state.ticket.name = "公司";
                state.ticket.msg = msg;
            } else {
                state.ticket.name = "个人";
                state.ticket.msg = "";
            }
        }
    },
    actions: {},
    modules: {}
})